/*
 * Atom.cpp
 *
 *  Created on: Feb 8, 2011
 *      Author: shaide
 */

#include "Atom.h"
#include <iostream>

static const char *(ELEMENT_TABLE[]) = {
		"H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne",
		"Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca",
		"Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn",
		"Ga", "Ge", "As", "Se",	"Br","Kr", "Rb", "Sr", "Y", "Zr",
		"Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn",
		"Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd",
		"Pn", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb",
		"Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg",
		"Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra",	"Ac", "Th",
		"Pa", "U", "Np", "Pu", "An", "Cn", "Bk", "Cf", "Es","Fm",
		"Md", "No", "Lr", "Rf", "Ha"
	};

Atom::Atom(OpenBabel::OBAtom *obatom)
{
	if (obatom->GetAtomicNum() <= N_ELEMS  &&
			obatom->GetAtomicNum() > 0)
	{
		_symbol = strdup(ELEMENT_TABLE[obatom->GetAtomicNum() - 1]);
	} else {
		_symbol = strdup(obatom->GetType());
	}
	_mass = obatom->GetAtomicMass();
	_pos[0] = obatom->GetX();
	_pos[1] = obatom->GetY();
	_pos[2] = obatom->GetZ();
	_class = 0;
	_valence = obatom->GetValence();
	_index = obatom->GetIdx()-1;
}

//Atom::Atom(const Atom* source)
//{
//	_pos[0] = source->_pos[0];
//	_pos[1] = source->_pos[1];
//	_pos[2] = source->_pos[2];
//	_symbol = source->_symbol;
//	_valency = source->_valency;
//	_similar = source->_similar;
//	_mass = source->_mass;
//	_flagged = false;
//}

void Atom::printAtom()
{
	using namespace std;
	cout << _symbol << "\t" << _pos[0] << ", " << _pos[1] << ", " << _pos[2] << "\t" << _class << endl;
}

//Atom::Atom(Atom const&)
//{
//	int *i = 0;
//	std::cout << *i;
//}
